<?php
namespace app\models;

use yii\base\Model;

/**
 * 助手类
 *
 * Class Util
 * @package app\models
 */
class Util extends Model
{
    /**
     * 根据数据库类型返回日期分组SQL
     * @param string $driver_name sqlite|mysql
     * @param string $split day|week|month|season|year
     * @param string $column 数据库字段名
     * @return string
     */
    public static function getDateGroup($driver_name, $split, $column)
    {
        switch ($driver_name) {
            case 'mysql':
                switch ($split) {
                    case 'year':
                        $sql = "from_unixtime({$column}, '%Y')";
                        break;
                    case 'season':
                        $sql = "concat(from_unixtime({$column}, '%Y.'), quarter(from_unixtime({$column})))";
                        break;
                    case 'month':
                        $sql = "from_unixtime({$column}, '%Y-%m')";
                        break;
                    case 'week':
                        $sql = "from_unixtime({$column}, '%U')";
                        break;
                    case 'day':
                    default:
                        $sql = "from_unixtime({$column}, '%Y-%m-%d')";
                }
                break;
            case 'sqlite':
            default:
                switch ($split) {
                    case 'year':
                        $sql = "strftime('%Y', {$column}, 'unixepoch', 'localtime')";
                        break;
                    case 'season':
                        $sql = "strftime('%Y.', {$column}, 'unixepoch', 'localtime') || cast(round(strftime('%m', {$column}, 'unixepoch', 'localtime') / 3.0 + 0.495) as int)";
                        break;
                    case 'month':
                        $sql = "strftime('%Y-%m', {$column}, 'unixepoch', 'localtime')";
                        break;
                    case 'week':
                        $sql = "strftime('%W', {$column}, 'unixepoch', 'localtime')";
                        break;
                    case 'day':
                    default:
                        $sql = "strftime('%Y-%m-%d', {$column}, 'unixepoch', 'localtime')";
                }
        }
        return $sql;
    }
    
    /**
     * 返回随机字符串
     * @param integer $len
     * @param string $seed
     * @return string
     */
    public static function randomStr($len = 32, $seed = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
    {
        $str = '';
        $seed_l = strlen($seed);
        for ($i = 0; $i < $len; $i++) {
            $str .= substr($seed, rand(0, $seed_l - 1), 1);
        }
        return $str;
    }
    
    /**
     * GET请求数据
     * @param string $url
     * @return string
     */
    public static function get($url)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
                                                    // curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
                                                    // curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
        curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }

    /**
     * POST请求数据
     * @param string $url
     * @param string $data
     * @return string
     */
    public static function post($url, $data)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
                                                    // curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
                                                    // curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
        curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }

    /**
     * 判断文件是否为图片
     * @param $file
     * @return bool
     */
    public static function isImage($file)
    {
        $info = @getimagesize($file);
        if (!$info) {
            return false;
        }
        if ($info[0] <= 0 || $info[1] <= 0) {
            return false;
        }
        if (strpos($info['mime'], 'image') !== 0) {
            return false;
        }
        return true;
        // $ext = image_type_to_extension($info['2']);
        // return in_array($ext, ['.jpeg']);
    }
}
